<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>generator使用</title>
</head>
<body>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.1.0/axios.js"></script>
<script>
  // 可以实现异步操作

  // 语法
  /*
	function* fn(){
		// 暂停 等待
		yield
	}
	 */

  /*function fn() {
		return 'aaa'
	}

	console.log(fn())*/

  /*
	generator不直接把返回值返回，它返回一个对象
	 */
  /*  function* gen() {
			console.log('1111')
			yield '2222'
			yield '3333'
			// 最后一次返回数据，并且告诉done:true
			return 'gen'
		}
		let g = gen()
		console.log(g.next())
		console.log(g.next())
		console.log(g.next())
		console.log(g.next())*/

  // 获取数据，通过next()
  /*let g = gen()
	let v1 = g.next()
	console.log(v1)
	if(!v1.done){
		let v2 = g.next()
		console.log(v2)
	}*/
  // 可以执行多次，如果超过next次数，返回{value:undefined,done:true}
  //console.log(g.next())


  /*function* gen() {
    let a = yield '1111'
    console.log(a)
    let b = yield '2222'
    console.log(b)
  }

  let g = gen()
	// 可以给yield传参 yield传数据时，第1next中传的参数是没有用
  g.next()
  g.next(10)
  g.next(20)
  g.next(20)*/


  // 异步请求操作
  function* gen() {
    let ret = yield axios.get('./data.json')
		console.log(ret)
    return ret
  }

  let g = gen()
  g.next().value.then(ret => g.next(ret))

	/*// 自定义一个递归方法 co
	co(function* (){
    let ret = yield axios.get('./data.json')
    console.log(ret)
    return ret
	})*/

</script>

</body>
</html>
